kaf24@scramble.cl.cam.ac.uk
kaf24@striker.cl.cam.ac.uk
lynx@idefix.cl.cam.ac.uk
+rgr22@boulderdash.cl.cam.ac.uk
rn@wyvis.camb.intel-research.net
rn@wyvis.research.intel-research.net
smh22@boulderdash.cl.cam.ac.uk
list_entry(p->pg_head.next, struct pfn_info, list) -
frame_table;
op.u.getdominfo.tot_pages = p->tot_pages;
+ op.u.getdominfo.cpu_time = p->cpu_time;
}
read_unlock_irqrestore(&tasklist_lock, flags);
#define DOM_DIR "dom"
#define DOM_MEM "mem"
#define DOM_VIF "vif"
+#define DOM_USAGE "usage"
#define MAP_DISCONT 1
read: dom_vif_read
};
+static ssize_t dom_usage_read(struct file * file, char * buff, size_t size, loff_t * off)
+{
+ char hyp_buf[128];
+ dom0_op_t op;
+ static int finished = 0;
+
+ if ( finished )
+ {
+ finished = 0;
+ return 0;
+ }
+
+ op.cmd = DOM0_GETDOMAININFO;
+ op.u.getdominfo.domain = (unsigned int)
+ ((struct proc_dir_entry *)file->f_dentry->d_inode->u.generic_ip)->data;
+
+ (void)HYPERVISOR_dom0_op(&op);
+
+ snprintf(hyp_buf, 128, "cpu: %lld\n", op.u.getdominfo.cpu_time);
+
+ if (*off >= (strlen(hyp_buf) + 1)) return 0;
+
+ copy_to_user(buff, hyp_buf, strlen(hyp_buf));
+
+ finished = 1;
+
+ return strlen(hyp_buf) + 1;
+}
+
+struct file_operations dom_usage_ops = {
+ read: dom_usage_read
+};
+
static void create_proc_dom_entries(int dom)
{
file->proc_fops = &dom_vif_ops;
file->data = (void *) dom;
}
+
+ file = create_proc_entry(DOM_USAGE, 0600, dir);
+ if (file != NULL)
+ {
+ file->owner = THIS_MODULE;
+ file->nlink = 1;
+ file->proc_fops = &dom_usage_ops;
+ file->data = (void *) dom;
+ }
}
static ssize_t dom_mem_write(struct file * file, const char * buff,